package cn.itcast.web.shiro;

import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 自定义shiro的权限过滤器
 */
public class MyPermissionsFilter  extends AuthorizationFilter {

    /**
     * 方法：完成权限校验
     * 参数：
     *  mappedValue ：配置过滤器输入的权限名称数组
     * 返回值：
     *   true：可以访问
     *   false：没有权限
     *          /company/list.do = perms["企业管理","部门管理"]
     *          subject.isPermitted(权限名称) ：自动的判断，用户是否具有权限
     * 需求：
     *    传递多个权限，权限之间是或的关系：主要满足一项权限要求，即可访问
     */
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        //1、获取subject
        Subject subject = this.getSubject(request, response);
        //2、获取到配置的权限数组
        String[] perms = (String[])((String[])mappedValue);
        for (String perm : perms) {
            if(subject.isPermitted(perm)) {
                return true;
            }
        }
        return false;
    }
}
